Test
(ii):类似的手段,证明
(iii):同样类似的手段,考虑到如果
(iv):
反过来如果
(i)
(iii)
(ii)
注:此题中(i)推(iii)也可以通过如下引理得到
中的幂等元可以被提升为 中幂等元,这里
假设存在
(iii):假设
另证:依
(iv):只需证Hausdorff,而这是因为Boole环中素理想皆极大(
反过来的验证和说明这两个对应关系互逆的证明同样循规蹈矩。
反过来如果弱零点定理成立,那么对真理想
我们也可以这么考虑:任何
于是立即可知张量积在同构意义下的唯一性:对两个张量积
如题
另证:令
for循环形如
1
2for VAR in ITERABLE:
BLOCK
如若ITERABLE中元素为tuple,也可以有如
1
2for VAR1,VAR2 in ITERABLE:
BLOCK
enumerate(ITERABLE)将一个可遍历的数据对象组合为一个索引序列(类型为enumerate),其元素为形如(index, item)的tuple。
range(start, stop[, step])生成可迭代的序列(类型为range),start默认为0,step默认为1。
Python有List
comprehension(列表推导式),形如[expression for item in iterable if condition == True]其中if条件默认为全部True。此外可以有[expression1 if condition1 else expression2 for item in iterable]的写法。
break可以结束最近的一个for或者while循环。
continue则是直接进入下一轮循环。
pass为空操作。
raise [exceptionName [(reason)]]会抛出异常,名称为exceptionName而描述为reason,形如exceptionName: reason。raise会抓取最近的报错信息(如在上一层try中被抛出的,try中异常被处理结束之后便不会再抛出),如果没有默认RuntimeError。
try和except可以不让程序报错的情况下尝试执行一段代码并就相关异常抛出进行处理,具体来说形如
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15try:
# ...some error prone code...
code block 1
except:
# ...do something with the error...
code block 2
except Exception_Name_1:
# ...do something with the error...
code block 3
else:
# ...to do when there is no error...
code block 4
finally:
#...some clean up code...
code block 5
如果出现异常(exception),那么将进入except:处理,默认任何异常都会进入except,而except Exception_Name_1只处理错误名称为Exception_Name_1的情形。finally:无论如何都会被执行。
电脑向python程序输入数据可以通过电脑键盘(keyboard)和输入文件(input data file)来输入,输出数据可以通过the monitor screen和输出文件来输出。
variable_name = input([prompt])prompt用于提示用户,从屏幕上输入的内容总是str类型。
print(..., end = str)可以使print输出...后再输出str,默认str为换行。
文件可以被大体分为binary files (二进制文件)和text files (文本文件),文本文件存储的是ASCII码。二进制文件一般包含headers以标识其文件内容,如果header无效则supporting programs可能不会打开这个二进制文件或者报告其损坏。二进制文件相对来说读取和存储速度更快,更少限制性而且更具安全性,但更容易损坏。
基于unix的操作系统中文件路径分隔符(delimiters)用/,对大小写敏感。而Windows则是\,对大小写不敏感。带有.或..的文件路径为相对路径,如..\langur.txt定位当前目录的父目录中名为langur.txt的文件,而..\langur.txt则定位当前目录,..\..\langur.txt定位父目录的父目录。
Python中os模块处理与操作系统的接口,需要import os。
os.getcwd()将返回当前工作目录的路径string。
os. listdir(dir)返回一个list,其中元素是dir中每个文件名称的string。dir默认是当前工作目录(string类型)。
os.remove(file)删除名为file的文件(file为string类型)。
os.rename(source, destination)将source重命名为destination。
os.mkdir(path)创建一个新目录path。
os.path.join(path, *paths)把一串路径串联成一个大路径。
os.path.exists(path)、os.path.isfile(path)和os.path.isdir(path)返回bool值判断是否存在如path所述的路径、目录和文件。
os.path.getmtime(path)返回path最新一次被修改的时间。
os.path.split(path)返回一对string,(head, tail),其中tail为字符串直至最末分隔符的后缀,其余在该分隔符前部分为head。
open ( file, mode, .. )会返回一个文件句柄,file为文件目录,可以绝对可以相对,mode是字符串以描述这个文件会如何被处理,具体来说的mode如下:
| 模式 | 描述 |
|---|---|
r |
以只读方式打开文件。文件的指针将会放在文件的开头。这是默认模式。 |
w |
打开一个文件只用于写入。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件。 |
a |
打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入。 |
r+ |
打开一个文件用于读写。文件指针将会放在文件的开头。文件不存在时会报I/O错误。 |
a+ |
打开一个文件用于读写。如果该文件已存在,文件指针将会放在文件的结尾。文件打开时会是追加模式。如果该文件不存在,创建新文件用于读写。 |
w+ |
打开一个文件用于读写。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件。 |
rb |
以二进制格式打开一个文件用于只读。文件指针将会放在文件的开头。这是默认模式。一般用于非文本文件如图片等。 |
wb |
以二进制格式打开一个文件只用于写入。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件。一般用于非文本文件如图片等。 |
.read(n)将从文件中读入n个字节的内容,默认全部读入(不推荐)。.readline(n)将从文件读取整行包括换行符\n,如果指定了一个非负数的参数,则返回指定大小的字节数,包括\n字符。如果已经到文件末尾(碰到结束符EOF)则会返回空字符串。.readlines()返回一个list,每个元素都是文件中的一行。如果碰到EOF则会返回空字符串。for i in f,其中f为读入文件句柄,可以按行迭代文件内容。
读入的结尾需要关闭文件,即.close()。
with statement可以自动关闭文件,它形如:
1
2
3with open(file, mode) as file_handler:
Statement_1
Statement_2
with open(file, mode, encoding='')将确定读入时选择的编码。如encoding='ascii'、encoding='utf-8'分别对应ascii码和utf-8编码的情况。python3默认为utf-8。
file.write(byte)可以向file_handle对于文件中写入string。write不会自动补上换行符。与read时类似的也有file_handle.writelines(list)。(同样不会默认加\n)
.txt / .tsv文件用Tab制表符\t分隔,CSV(Comma Separated
Values)文件用,分隔。
import csv 可以调用CSV模块。
csv.reader(file, delimiter='')返回一个reader
object,可以按行迭代csvfile文件中读取内容(每行都返回为string),csvfile可以是文件或文件对象,也可以是类似文件的对象(如StringIO对象)。delimiter为分隔符,默认为逗号,也可以改为如'等。类似地,csv.writer返回将数据写入
CSV 文件的写入器对象
在csv文件中写入内容可以考虑
1
2
3csvwriter = csv.writer(csvfile, delimiter='')
csvwriter.writerow(row)
csvwriter.writerows(rows)
delimiter默认为逗号。row是一个列表,rows则是每行对应列表之列表。writerows会自动换行。
csv.DictReader(f, fieldnames=None, restkey=None, restval=None, dialect='excel', *args, **kwds)会返回一个类似reader的reader
object,但将每行中的信息映射到一个字典,该字典的keys由可选的fieldnames参数给出。fieldnames参数是一个序列。如果省略字段名,则文件f第一行中的值将用作字段名,并将从结果中省略。如果提供了字段名,将使用它们,并且第一行将包含在结果中。无论字段名是如何确定的,字典都会保留它们的原始顺序。例如csv.DictReader(f, fieldnames=['a', 'b', 'c'])则对应的keys是a,
b, c,而默认则是csv文件第一行对应内容。
如果一行的字段多于字段名,则将剩余的数据放入列表中,并使用由restkey指定的字段名(默认为None)存储。如果非空白行的字段少于字段名,则用restval的值(默认为None)填充缺失的值。
类似地还有csv.DictWriter(f, fieldnames, restval='', extrasaction='raise', dialect='excel', *args, **kwds)。它将创建一个对象,其操作方式与常规写入器类似,但将字典映射到输出行。fieldnames参数是一个键序列,用于标识传递给writerow方法的字典中的values写入文件f的顺序。它的用法例如
1
2
3
4
5
6
7
8
9
10import csv
with open('names.csv', 'w', newline='') as csvfile:
fieldnames = ['first_name', 'last_name']
writer = csv.DictWriter(csvfile, fieldnames=fieldnames)
writer.writeheader()
writer.writerow({'first_name': 'Baked', 'last_name': 'Beans'})
writer.writerow({'first_name': 'Lovely', 'last_name': 'Spam'})
writer.writerow({'first_name': 'Wonderful', 'last_name': 'Spam'})
在程序生命周期中创建的所有变量都临时存储在内存中,并在程序终止时消失。而pickle模块是Python专用的持久化模块,也就是让数据持久化保存。 “Pickling” 是将 Python 对象层次结构转换为字节流的过程,而 “unpickling” 是逆操作。
pickle.dump(pythonObject, pickleDestination, pickle_protocol=None, *, fix_imports=True)将python对象pythonObject转换成写入pickleDestination的字节流。类似地可以用pickle.load(f)。用pickle.dump和pickle.load读写文件时要用wb和rb模式。
pickle.dumps(pythonObject)返回pythonObject转换而来的二进制串。pickle.loads(bytes_object)有类似功用。
Booleans, Integers, Floats, Strings, Tuples, Lists, Sets, Dictionaries均能被pickle。
Borcherds交换代数网课的笔记
burnside多项式
对一般的不含幺环,我们某种意义上有办法把它变成一个含幺环,也就是“硬塞”一个新的单位元
注:unitization具有函子性,并且是
取
模
另一种观点是考虑群
对一般的情况,即对
Reading Section (Eisenbud'c Commutative Algebra): 1.4
Exercises: 1.1, 1.3, 1.4, 1.5
1.
2. 任何
3.
注意到
多元多项式环中理想的生成元数量并不能被未定元数控制。例如
Reading: Section 1,4
Exercises: 15.15 a
对
对
这涉及到无穷多次求和的操作,但注意到其中
证明
中一样将单项式列出,横轴为诸
注:5.3的证明对任何有限生成的自由Abel群均适用。
事实上上面证明了
Reading: Section 1.5
利用基定理可以证明一些不变量的有限生成性,至少是对有限群
注1:
分裂,从而
现在回到6.1的证明,取
注1:此处的论证适用于一大类分次环。对分次环
注2:一般分次环中
上面的证明首先可以拓展到紧群,因为紧群上可以积分,从而也可以定义类似的Reynolds算子为
此外对非紧群 
而这套论证在无穷维时则会基本失效,此时
Noether对定理6.2中
Reading: Section 1.7
Exercises: 1.22, 1.23
只需证
诺特环上
包括但不限于关于Fulton的Algebraic Curves中卡过我的/感觉有意思的/可能需要经常查看的/无端决定写在这里的东西。
考虑固定前
1.
2.
3.
对于1,假设存在多项式
注意到
反过来把
事实上此中有一些神奇的对应。不难证明
设
事实上我们也有
注意到我们考虑这种代数集和其理想之间的对应时完全没有用到多项式本身的性质。事实上
对
1.
2.
注意到
Hilbert弱零点定理可以被等价地叙述为如下定理的逆命题:若对
零点定理则可以被重述为如果
b.
2024.10.6开始依Kato的数论I以及MIT18.875自学代数数论,这里主要是MIT18.875中的gap和problem set答案
注意到特征
statement 语句
expression 表达式
operands 操作数(如6*7中的6)
declare 声明
assignment 赋值
Compound assignment operators 复合赋值运算符(如+=)
identifier
标识符(变量名,必须从字母或_开始,不能从数字开始,只能有字母数字下划线)
immutable 不可变的
calling function 调用函数
asterisk 星号
type()可判断数据类型。
round()四舍五入取整,math.ceil()/math.floor()上/下取整(需import math)
字符串不可修改。
用'、"、'''、"""之一括起来。
用+可连接两个string,用*(数字)可重复(数字)次。
用in或not in可判断字符串是不是另一个字符串的子串。
字符串可按ASCII码下字典序比较。
len()可以给出字符串长度。
从后往前遍历字符串可以用负数下标(如s[-1]是最后一个元素)。string_x [start: stop: step]可以给出子串,具体来说是start,start+step,...,step取负数可以反向字符串(如s[::-1]为翻转字符串),此时start大于等于stop才能取出子串。
string.lower()/string.upper()可以进行大写→小写/反之的操作。
string.replace(oldvalue, newvalue, count)返回把count个oldvalue替换为newvalue的string,默认全替换。
string.count(value, start, end)统计[start,end)中子串value的出现次数。
string.find(value, start, end)返回[start,end)中子串value第一次出现的位置,如无则返回-1。
string.split(separator, maxsplit)返回把string中按子串separator切分最多maxsplit次成的list。separator默认空格,maxsplit默认-1即全部切分。
string.startswith(value, start, end)/string.endswith(value, start, end)返回bool值,判断string是否以子串value起始/结尾。start/end默认是全序列。
string.strip(characters)/.lstrip(characters)/.rstrip(characters)返回string去除了起始和结尾/起始/结尾连续的字符characters的串,如果characters是字符串,那就去除全部起始结尾连续字符属于set(characters)中的串。characters默认为空格。
string.join(sequence)为将字符串的序列sequence中字符串连接起来,每两个相邻字符串中间插上一个string。
string.format(s1,s2,...)可用于格式化字符串,具体来说string中的{n}会被替换为sn,如果每一个括号都不填数那么默认从0开始依次增加(要么都填要么都不填)。
字符串有许多前缀。
| 前缀 | 功能 | 示例 | 说明 |
|---|---|---|---|
| r | 原始字符串字面量,阻止字符串中字符被解释为转义字符。
|
r'C:\Program Files\Python'便会使得字符串原样成为C:\Program Files\Python|
| b | 字节字符串字面量,表示字符串以字节序列的形式存储。 |
b'hello' | 主要用于处理二进制数据,例如文件I/O。 |
| f | f-字符串 (Formatted String
Literals),允许在字符串中嵌入表达式。 |
f'{name} is {age} years old' |
使用花括号{}将表达式嵌入到字符串中,并进行格式化。 |
list的+,*的用法与string相同,但list可以修改。
del a[i]可用来删去list中index为i的项,类似的也可以删去片段。
sum(list), max(list), min(list)
返回list的求和、最大值、最小值
list.append(elmnt)将elmnt加入到list结尾
list.extend(seq)将列表seq放在list结尾
list.insert(pos, elmnt)在pos位插入elmnt(原list[pos]向后移动)
list.pop(pos)删去list[pos]并将其返回。默认pos=-1,即删结尾元素。
list.remove(elmnt)将elmnt在list中第一次出现的位置删去,不返回值。
list.count(value)
list.index(elmnt)返回elmnt在list中第一次出现的位置
list.sort(reverse=True|False, key=myFunc)默认reverse=False,key为自定义的比较函数(默认<)
list.reverse()翻转list
tuple有序且不可变,有通常的指标、切片、+*操作。
elmnt in/not in tuple是bool值,表达elmnt在/不在tuple中。
len(),sum(),min(),max(),sorted(),count(),index()对于tuple均照常(sorted返回list)。
Tuple可以一次将多个分量以坐标形式(如pos = (x, y, z))packing起来,也可以按分量分别赋值给以逗号分隔开的多个变量(如x, y, z = pos)。
zip()可将多个list/tuple/string等打包成按分量的tuple并返回一个tuple的迭代器,用如list()可将之list化,合并按最短的那个为准(如list(zip([1,
2], [1, 2, 3]))是[(1, 1), (2, 2)])
Set无序而且不包含重复元素,可以包含unchangeable
objects(如number,string,tuple),但不能包含changeable
objects(如list,dictionary)。
用大括号如正常数学中那样可以创建一个集合。
Set中有照常的in、not in、len()、sorted()(sorted返回list)。
set1 & set2或set1.intersection(set2)是交集运算(均为返回交集但不修改原集合),同理|和.union()并,-和.difference()差,^和.symmetric_difference()是对称差。
set.add(elmnt)添加elmnt。
set.remove(item)删去item,如果不存在会报错。
set.discard(value)删去value,如果不存在不会报错。
set(list/string)可以将list/string转换为set
x.issubset(y)/.issuperset(y)判断x是否是y的子集/父集
Dictionary是无序的查找表,由(key,value)对组成,key只能是不可变对象,一key不可重复,value可以重复。
Dictionary可以通过如{ key1 : value1, key2 : value2, key3 : value3 }的大括号创建,也可通过如dict(a = 'a', b = 'b', t = 't')的用法创建,也可通过如dict([('one', 1), ('two', 2), ('three', 3)])的方式创建(里面dict()内小中括号并无区别,list和tuple都一样)。
dictionary_name[key] = value可以在dict中加入或更新key的value。
del dict[key]可以remove掉key,没有时会报错。
in和not in可以key判断在或不在字典中。
dict.keys()/.values()/.items()返回dict的key/value/(key,
value)的tuple组成的list。
dict.get(keyname, value)返回keyname对应的值,如不存在返回value。value默认为None。
dict.update(iterable)用可迭代的iterable来更新dict,可迭代的如某个dictionary或者(key,value)的list等等。
dict.pop(key)/.popitem(key)romove掉key并返回其value/(可以看作随机remove)remove掉并返回最后一个key-value对,没有时会报错。
print
以特定格式输出可以考虑modulo operator %,format()和f-strings。
sorted
sorted(iterable, cmp=None, key=None, reverse=False)对任何可迭代对象iterable排序并返回排序后的可迭代对象。例如sorted(list, reverse=True/False)返回list排序后的序列,默认从小到大排序(默认reverse=False),事实上迭代器都可以(如
reversed
和sorted同理。
map
map(function, iterable, ...)对参数序列iterable中每一个元素调用function。
eval()
eval(expression[, globals[, locals]])用于执行一个字符串表达式expression。
next()
next(iterable[, default])返回迭代器的下一个项目。default可选,用于设置在没有下一个元素时返回该默认值,如果不设置,又没有下一个元素则会触发
StopIteration 异常。
1. 对任意有限集
2.
f.i.p.无非紧性的逆否形式,因而自然等价于紧。